import axios from 'axios';
import config from './config';
import Cookies from 'js-cookie';
import router from '@/router';
import { baseUrl, baseUrlImageAdd, baserUrlbind } from '@/config';

let baseURL = config.baseUrl;
export default function $axios(options) {
  console.log('options',options.url,options.url.indexOf('collectionDataExport'))
  if (options.url == '/addAvatar' || options.url.indexOf('collectionDataExport')>0) {
    baseURL = baseUrlImageAdd;
  } else {
    baseURL = baseUrl;
  }
  return new Promise((resolve, reject) => {
    const instance = axios.create({
      baseURL: baseURL,
      headers: config.headers,
      timeout: config.timeout
    });
    // request 拦截器
    instance.interceptors.request.use(
      config => {
        let token = sessionStorage.getItem('token');
        if (token) {
          config.headers.token = token;
          config.headers.ttype = 1;
        } else {
          router.push('/login');
        }
        if (config.method === 'post') {
        }

        return config;
      },

      error => {
        // 请求错误时
        console.log('request:', error);
        // 1. 判断请求超时
        if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
          console.log('timeout请求超时');
          // return service.request(originalRequest);// 再重复请求一次
        }
        // 2. 需要重定向到错误页面
        const errorInfo = error.response;
        console.log(errorInfo);
        if (errorInfo) {
          error = errorInfo.data; // 页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
          const errorStatus = errorInfo.status; // 404 403 500 ...
          router.push({
            path: `/error/${errorStatus}`
          });
        }
        return Promise.reject(error); // 在调用的那边可以拿到(catch)你想返回的错误信息
      }
    );

    // response 拦截器
    instance.interceptors.response.use(
      response => {
        let data;
        let err;
        if (response.data == undefined) {
          data = JSON.parse(response.request.responseText);
        } else {
          data = response.data;
        }
        // 根据返回的code值来做不同的处理
        switch (data.code) {
          case 10011: // 请求失败
            err = new Error('token失效,请重新登录！');
            sessionStorage.clear();
            Cookies.remove('token');
            router.push('/login');
            throw err;
          default:
        }

        return data;
      },

      err => {
        // console.info(err,'err')
        if (err && err.response) {
          switch (err.response.status) {
            case 400:
              err.message = '请求错误';
              break;
            case 401:
              err.message = '未授权，请登录';
              break;
            case 403:
              err.message = '拒绝访问';
              break;
            case 404:
              err.message = `请求地址出错: ${err.response.config.url}`;
              break;
            case 408:
              err.message = '请求超时';
              break;
            case 500:
              err.message = '服务器内部错误';
              break;
            case 501:
              err.message = '服务未实现';
              break;
            case 502:
              err.message = '网关错误';
              break;
            case 503:
              err.message = '服务不可用';
              break;
            case 504:
              err.message = '网关超时';
              break;
            case 505:
              err.message = 'HTTP版本不受支持';
              break;

            default:
          }
        }
        console.log(err);
        return Promise.reject(err); // 返回接口返回的错误信息
      }
    );

    // 请求处理
    instance(options)
      .then(res => {
        resolve(res);
        return false;
      })
      .catch(error => {
        reject(error);
      });
  });
}
